package com.itfly.controller;


import com.itfly.entity.Product;
import com.itfly.exception.BusinessException;
import com.itfly.result.Result;
import com.itfly.service.ProductService;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.UUID;

@RestController//@ResponseBody注解的作用是将Controller方法返回的Java对象通过消息转换器转换为JSON格式数据，写入到响应体中。
@RequestMapping("/api/product")
@CrossOrigin
public class ProductController {
    @Autowired
    private ProductService productService;

    //新增
    @PostMapping("/add")
    public Result<String> add(@RequestParam("pname") String pname,
                               @RequestParam("pno") String pno,
                               @RequestParam("pitem") String pitem,
                               @RequestParam("punit") String punit,
                               @RequestParam("price") String price,
                               @RequestParam("imageFile") MultipartFile file) throws IOException {//@RequestBody 注解来将HTTP请求体中的 JSON 数据通过消息转换器转换为 Java 对象。
        if(pname.isEmpty() || pno.isEmpty() ||pname == null ||pno ==null ||pname.equals("")||pno.equals("")){
            //出现业务异常时抛出该异常
            throw new BusinessException("商品名称和商品编号不能为空");
        }
        String path="http://localhost:8088/uploadfiles/";
        //为上传到服务器的文件取名，使用UUID防止文件名重复
        String filename= UUID.randomUUID().toString()+"-"+file.getOriginalFilename();
        //创建Jersey客户端
        Client client = Client.create();
        //使用Jersey客户端完成文件内容的上传
        String filePath= null;
        filePath = path +"/" + URLEncoder.encode(filename, StandardCharsets.UTF_8);
        WebResource webResource = client.resource(filePath);
        webResource.put(file.getBytes());
        Product product = new Product();
        product.setPname(pname);
        product.setPno(pno);
        product.setPitem(pitem);
        product.setPunit(punit);
        product.setPrice(Double.valueOf(price));
        product.setImage(filePath);
        System.out.println(product.toString());
        productService.add(product);
        return new Result<String>(1,"新增商品成功",null);
    }

    //列表
    @RequestMapping("/list")
    public Result<List<Product>> list(){//@RequestBody 注解来将HTTP请求体中的 JSON 数据通过消息转换器转换为 Java 对象。
        List<Product> list = productService.search();

        return new Result<List<Product>>(1,"获取商品成功",list);
    }

    //删除
    @RequestMapping("/delete")
    public Result<Product> delete(@RequestParam("pno") String pno){//@RequestBody 注解来将HTTP请求体中的 JSON 数据通过消息转换器转换为 Java 对象。
        Product product = productService.searchByPno(pno);
        productService.delete(pno);
        //删除服务器上的图片
        String originalFilename = product.getImage(); // 要删除的文件名
        // 创建Jersey客户端
        Client client = Client.create();
        // 构建文件的完整路径
        // 使用Jersey客户端发送DELETE请求
        WebResource webResource = client.resource(originalFilename);
        ClientResponse response = webResource.delete(ClientResponse.class);
        return new Result<Product>(1,"删除商品成功",null);
    }
    //229970234-姚云飞
    //执行更新操作
    @RequestMapping("/update")
    public Result<Product> update(@RequestParam("pname") String pname,
                                  @RequestParam("pno") String pno,
                                  @RequestParam("pitem") String pitem,
                                  @RequestParam("punit") String punit,
                                  @RequestParam("price") String price,
                                  @RequestParam("imageFile") MultipartFile file) throws IOException {//@RequestBody 注解来将HTTP请求体中的 JSON 数据通过消息转换器转换为 Java 对象。

        Product product = new Product();
        product.setPname(pname);
        product.setPno(pno);
        product.setPitem(pitem);
        product.setPunit(punit);
        product.setPrice(Double.valueOf(price));
        String path="http://localhost:8088/uploadfiles/";
        //为上传到服务器的文件取名，使用UUID防止文件名重复
        String filename= UUID.randomUUID().toString()+"-"+file.getOriginalFilename();
        //创建Jersey客户端
        Client client = Client.create();
        //使用Jersey客户端完成文件内容的上传
        String filePath= null;
        filePath = path +"/" + URLEncoder.encode(filename, StandardCharsets.UTF_8);
        WebResource webResource = client.resource(filePath);
        webResource.put(file.getBytes());
        // 替换服务器上的旧图片
        Product product1 = productService.searchByPno(pno);
        WebResource oldWebResource = client.resource(product1.getImage());
        oldWebResource.delete(); // 删除旧文件
        product.setImage(filePath);
        productService.update(product);
        return new Result<Product>(1,"修改商品成功",product);
    }
    //根据Pno查询商品
    @RequestMapping("/search")
    public Result<Product> search(@RequestParam("pno") String pno){//@RequestBody 注解来将HTTP请求体中的 JSON 数据通过消息转换器转换为 Java 对象。
        Product product = productService.searchByPno(pno);
        return new Result<Product>(1,"根据Pno查询商品成功",product);
    }
}
